import java.util.HashMap;
import java.util.Map;

class Solution {
    public int longestSubsequence(int[] arr, int difference) {
        int n = arr.length;
        //int[] dp = new int[n];// 以 i 位置为结尾的最长定差子序列的长度
        Map<Integer, Integer> map = new HashMap<>();
        // 初始化
        map.put(arr[0], 1);
        //Arrays.fill(dp, 1);
        // 状态转移方程
        int ret = 1;
        for(int i = 1; i < n; i++){
            map.put(arr[i], map.getOrDefault(arr[i] - difference, 0) + 1);
            ret = Math.max(ret, map.getOrDefault(arr[i], 1));
        }
        return ret;
    }
}